package cn.iocoder.yudao.module.hs.service.entryorderdetail;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.hs.controller.admin.entryorderdetail.vo.EntryOrderDetailPageReqVO;
import cn.iocoder.yudao.module.hs.controller.admin.entryorderdetail.vo.EntryOrderDetailRespVO;
import cn.iocoder.yudao.module.hs.controller.admin.entryorderdetail.vo.EntryOrderDetailSaveReqVO;
import cn.iocoder.yudao.module.hs.dal.dataobject.entryorderdetail.EntryOrderDetailDO;
import cn.iocoder.yudao.module.hs.dal.dataobject.material.MaterialDO;
import cn.iocoder.yudao.module.hs.dal.dataobject.tray.TrayDO;

import javax.validation.Valid;

/**
 * 入库单明细 Service 接口
 *
 * @author 航盛
 */
public interface EntryOrderDetailService {

    /**
     * 创建入库单明细
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createEntryOrderDetail(@Valid EntryOrderDetailSaveReqVO createReqVO);

    /**
     * 更新入库单明细
     *
     * @param updateReqVO 更新信息
     */
    void updateEntryOrderDetail(@Valid EntryOrderDetailSaveReqVO updateReqVO);

    /**
     * 删除入库单明细
     *
     * @param id 编号
     */
    void deleteEntryOrderDetail(Long id);

    /**
     * 获得入库单明细
     *
     * @param id 编号
     * @return 入库单明细
     */
    EntryOrderDetailDO getEntryOrderDetail(Long id);

    /**
     * 获得入库单明细分页
     *
     * @param pageReqVO 分页查询
     * @return 入库单明细分页
     */
    PageResult<EntryOrderDetailRespVO> getEntryOrderDetailPage(EntryOrderDetailPageReqVO pageReqVO);

    /**
     * 添加入库单明细
     * @param tray
     * @param material
     */
    void insertEnterOrderDetail(TrayDO tray, MaterialDO material);
}